home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / archiver / jampack4.lzh / jampack4 / deplzw.s < prev    next >
Text File  |  1987-04-21  |  1KB  |  74 lines

  1. ;LZW Depack routine for the JAM packer V4.0
  2. ;It is kept simple to minimise depack time.
  3.  
  4.     CLR.L    -(A7)
  5.     MOVE.W    #$20,-(A7)
  6.     TRAP    #1
  7.     ADDQ.L    #6,A7
  8.     MOVE.L    D0,-(A7)
  9.  
  10.     MOVE.L    #$80000,A0    ;start of packed data address
  11.     MOVE.L    #$90000,A1    ;depack to address
  12.     BSR.S    UNPACK
  13.  
  14.     MOVE.W    #$20,-(A7)
  15.     TRAP    #1
  16.     ADDQ.L    #6,A7
  17.     RTS
  18.  
  19. UNPACK:
  20.     MOVE.W    $FFFF8240.W,-(A7)
  21.     MOVE.L    A0,A4
  22.     MOVE.L    A1,A6
  23.     ADDA.L    8(A0),A4
  24.     ADDA.L    4(A0),A6
  25.     MOVE.L    A6,A5            ;KEEP COPY TO CHECK AGAINST
  26.     MOVE.L    4(A0),D4
  27.     MOVE.B    #$20,D3
  28.  
  29.     MOVE.W    #$0FED,D5
  30.     MOVEA.L A6,A3            ;KEEP ADDR OF END OF SPACES
  31.  
  32.     MOVEQ    #$00,D7            ;START UNPACK ROUTINE
  33. TOPDEP:    DBF    D7,NOTUSED
  34.     MOVE.B    -(A4),D6        ;GET COMMAND BYTE
  35.     MOVEQ    #$07,D7
  36. NOTUSED:
  37.     LSR.B    #1,D6
  38.     BCC.S    COPY            ;BIT NOT SET, COPY FROM UNPACKED AREA 
  39.     MOVE.B    -(A4),-(A6)        ;COPY BYTES FROM PACKED AREA
  40.     ADDQ.W    #1,D5
  41.     SUBQ.L    #1,D4
  42.     BGT.S    TOPDEP
  43.     BRA.S    EXITUP
  44. COPY:    MOVE.B    -2(A4),D0
  45.     LSL.W    #4,D0
  46.     MOVE.B    -(A4),D0
  47.     MOVE.W    D0,$FFFF8240.W
  48.     SUB.W    D5,D0
  49.     NEG.W    D0
  50.     AND.W    #$0FFF,D0
  51.     LEA    1(A6,D0.W),A0
  52.     MOVEQ    #$0F,D1
  53.     AND.B    -(A4),D1
  54.     ADDQ.W    #2,D1
  55.     MOVEQ    #$01,D0
  56.     ADD.W    D1,D0
  57.     CMPA.L    A5,A0
  58.     BGT.S    SPACES
  59.     
  60. WRITE:    MOVE.B    -(A0),-(A6)
  61.     DBF    D1,WRITE
  62. BACK:    ADD.L    D0,D5
  63.     SUB.L    D0,D4
  64.     BGT.S    TOPDEP
  65. EXITUP:    MOVE.W    (A7)+,$FFFF8240.W
  66.     RTS
  67.  
  68. SPACES: CMPA.L    A5,A0
  69.     BLE.S    WRITE
  70.     MOVE.B    D3,-(A6)        ;COPY OUT SPACES
  71.     SUBQ.L    #1,A0
  72.     DBF    D1,SPACES
  73.     BRA.S    BACK
  74.